//package com.dkx.springbootwebsocket.controller;
//
//import com.dkx.springbootwebsocket.entity.Message;
//import com.dkx.springbootwebsocket.service.MessageDebugService;
//import com.dkx.springbootwebsocket.service.MessageRoutingDebugService;
//import com.dkx.springbootwebsocket.service.WebSocketMessageService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.ResponseEntity;
//import org.springframework.messaging.simp.SimpMessagingTemplate;
//import org.springframework.messaging.simp.user.SimpSession;
//import org.springframework.messaging.simp.user.SimpSubscription;
//import org.springframework.messaging.simp.user.SimpUser;
//import org.springframework.messaging.simp.user.SimpUserRegistry;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.*;
//
///**
// * @Author: 杜科璇
// * @Description: TODO
// * @Date: 2025/11/1 0:08
// * @Version: 1.0
// */
//// MessageRouteDebugController.java
//// DebugRouteController.java
//@RestController
//@RequestMapping("/api/debug")
//@CrossOrigin(origins = "*")
//@Slf4j
//public class DebugRouteController {
//
//    @Autowired
//    private SimpMessagingTemplate messagingTemplate;
//
//    @Autowired
//    private SimpUserRegistry simpUserRegistry;
//
//    @Autowired
//    private WebSocketMessageService messageService;
//
//    /**
//     * 测试消息路由到特定用户
//     */
//    @PostMapping("/route/test-to-user")
//    public ResponseEntity<Map<String, Object>> testRouteToUser(
//            @RequestParam String fromUser,
//            @RequestParam String toUser,
//            @RequestParam String content) {
//        Map<String, Object> result = new HashMap<>();
//
//        try {
//            log.info("=== 开始消息路由测试 ===");
//            log.info("从用户: {} 发送到用户: {}, 内容: {}", fromUser, toUser, content);
//
//            // 检查目标用户是否在注册表中
//            SimpUser targetUser = simpUserRegistry.getUser(toUser);
//            if (targetUser != null) {
//                log.info("找到目标用户: {}", toUser);
//                log.info("用户会话数: {}", targetUser.getSessions().size());
//
//                for (SimpSession session : targetUser.getSessions()) {
//                    log.info("会话ID: {}, 订阅数: {}", session.getId(), session.getSubscriptions().size());
//                    for (SimpSubscription subscription : session.getSubscriptions()) {
//                        log.info("  订阅目的地: {}", subscription.getDestination());
//                    }
//                }
//            } else {
//                log.warn("未在用户注册表中找到目标用户: {}", toUser);
//            }
//
//            // 创建测试消息
//            Message message = new Message(
//                    UUID.randomUUID().toString(),
//                    fromUser,
//                    toUser,
//                    content,
//                    Message.MessageType.P2P,
//                    System.currentTimeMillis(),
//                    false
//            );
//
//            // 测试方法1：convertAndSendToUser
//            log.info("测试方法1: convertAndSendToUser");
//            try {
//                messagingTemplate.convertAndSendToUser(toUser, "/queue/messages", message);
//                log.info("方法1发送成功");
//            } catch (Exception e) {
//                log.error("方法1发送失败: {}", e.getMessage());
//            }
//
//            // 测试方法2：直接convertAndSend
//            log.info("测试方法2: 直接convertAndSend");
//            try {
//                String destination = "/user/" + toUser + "/queue/messages";
//                messagingTemplate.convertAndSend(destination, message);
//                log.info("方法2发送成功，目的地: {}", destination);
//            } catch (Exception e) {
//                log.error("方法2发送失败: {}", e.getMessage());
//            }
//
//            // 测试方法3：遍历所有会话发送
//            log.info("测试方法3: 遍历会话发送");
//            if (targetUser != null) {
//                for (SimpSession session : targetUser.getSessions()) {
//                    try {
//                        String destination = "/user/" + session.getId() + "/queue/messages";
//                        messagingTemplate.convertAndSend(destination, message);
//                        log.info("方法3发送成功到会话: {}", session.getId());
//                    } catch (Exception e) {
//                        log.error("方法3发送失败到会话 {}: {}", session.getId(), e.getMessage());
//                    }
//                }
//            }
//
//            log.info("=== 消息路由测试结束 ===");
//
//            result.put("success", true);
//            result.put("message", "消息路由测试完成");
//            return ResponseEntity.ok(result);
//
//        } catch (Exception e) {
//            log.error("消息路由测试失败", e);
//            result.put("success", false);
//            result.put("message", "测试失败: " + e.getMessage());
//            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);
//        }
//    }
//
//    /**
//     * 获取所有用户订阅信息
//     */
//    @GetMapping("/route/subscriptions")
//    public ResponseEntity<Map<String, Object>> getAllSubscriptions() {
//        Map<String, Object> result = new HashMap<>();
//
//        try {
//            Map<String, List<String>> userSubscriptions = new HashMap<>();
//
//            // 获取所有用户
//            Set<SimpUser> users = simpUserRegistry.getUsers();
//            log.info("当前在线用户数: {}", users.size());
//
//            for (SimpUser user : users) {
//                List<String> subscriptions = new ArrayList<>();
//                for (SimpSession session : user.getSessions()) {
//                    for (SimpSubscription subscription : session.getSubscriptions()) {
//                        subscriptions.add(subscription.getDestination());
//                    }
//                }
//                userSubscriptions.put(user.getName(), subscriptions);
//                log.info("用户 {} 有 {} 个订阅", user.getName(), subscriptions.size());
//            }
//
//            result.put("subscriptions", userSubscriptions);
//            result.put("success", true);
//            return ResponseEntity.ok(result);
//
//        } catch (Exception e) {
//            log.error("获取订阅信息失败", e);
//            result.put("success", false);
//            result.put("message", "获取失败: " + e.getMessage());
//            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);
//        }
//    }
//
//    /**
//     * 直接发送测试消息
//     */
//    @PostMapping("/send-direct")
//    public ResponseEntity<Map<String, Object>> sendDirectMessage(
//            @RequestParam String fromUser,
//            @RequestParam String toUser,
//            @RequestParam String content) {
//        Map<String, Object> result = new HashMap<>();
//
//        try {
//            log.info("直接发送测试消息: from={}, to={}, content={}", fromUser, toUser, content);
//
//            // 创建测试消息
//            Message message = new Message(
//                    UUID.randomUUID().toString(),
//                    fromUser,
//                    toUser,
//                    content,
//                    Message.MessageType.P2P,
//                    System.currentTimeMillis(),
//                    false
//            );
//
//            // 直接使用 messagingTemplate 发送
//            messagingTemplate.convertAndSendToUser(toUser, "/queue/messages", message);
//
//            log.info("直接发送成功");
//
//            result.put("success", true);
//            result.put("message", "直接发送测试消息完成");
//            return ResponseEntity.ok(result);
//
//        } catch (Exception e) {
//            log.error("直接发送测试消息失败", e);
//            result.put("success", false);
//            result.put("message", "发送失败: " + e.getMessage());
//            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);
//        }
//    }
//}